"""
1. MyList类
1） 初始化方法
2） __iter__() 方法，对外提供迭代器
3） addItem() 方法，用来添加数据

2. 自定义迭代器类：MyList iterator
1) 初始化方法
2）迭代器方法 __iter__()
3) 获取下一个元素值的方法 __next__()

目标：
 mylist = Mylist()
 for value in mylist:
     print(value)
"""
class MyList(object):
    def __init__(self):
        self.items = []
        pass

    def __iter__(self):
        # 创建MyListIterator 对象
        mylist_iterator = MyListerator(self.items)  # 迭代器
        return mylist_iterator

    def addItem(self, data):
        # 追加保存数据
        self.items.append(data)
        print(self.items)


#2 .自定义迭代器类：MyListIterator
class MyListerator():
    # 1.初始化方法
    def __init__(self,items):
        # 定义实例属性， 保存MyList 类传递过来的items
        self.items = items
        # 记录迭代器迭代的位置
        self.current_index = 0
    # 2.迭代器方法__iter__():
    def __iter__(self):
        pass
    # 3.获取下一个元素值的方法 __next__()
    # next(mylist_iterator) 就会调用 __next__() 方法
    def __next__(self):
        # 1. 判断当前的下标是否越界
        if self.current_index < len(self.items):
            # 1. 根据下标获取对应的 元素值
            data = self.items[self.current_index]
            # 2. 下标位置 +1
            self.current_index += 1
            # 3. 返回下标对应的数据
            return data
        # 如果越界，直接抛出异常
        else:
        # raise 用于主动抛出异常
        # StopIteration :表示停止迭代的异常
            raise StopIteration
     

if __name__ == '__main__':
    # 1.创建自定义列表对象
    mylist = MyList()
    mylist.addItem("张山")
    mylist.addItem("张飞")
    mylist.addItem("关羽")
    mylist.addItem("班长")
    mylist.addItem("xxxxx")
    

    # 2.遍历 满足以下：
    # 1> iter(mylist) 获取 mylist对象的迭代器 --> MyList -->__iter__()
    # 2> next(迭代器) 获取下一个值
    # 3> 捕获异常
    for value in mylist:
        print("name:",value)



